package com.rdc.dictionary.util;

import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import com.rdc.dictionary.application.App;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * @author Soul Mate
 * @file 文件名
 * @brief 文件存储工具类
 */

public class FileUtil
{

	//SD卡的目录
	private String SDPath;

	//app存储的目录  （ ****/Vocabulary/ ）
	private String AppPath;

	//单例
	private static FileUtil fileUtil;

	/**
	 * 私有化的构造器
	 */
	private FileUtil() {
		//如果手机已插入SD卡，且应用程序具有读写SD卡的功能，则返回true
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

			SDPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";

			//清理测试时产生的文件
			//            File f = new File(SDPath + "VocabularyMP3");
			//            deleteFile(f);

			//保存在VocabularyMp3文件下
			File file = createSDDir(SDPath, "VocabularyMP3");
			AppPath = file.getAbsolutePath() + "/";
		}
	}

	/**
	 * 单例类FileUtil获取实例方法
	 */
	public static FileUtil getInstance() {
		if (fileUtil == null) {
			synchronized (FileUtil.class) {
				if (fileUtil == null) {
					fileUtil = new FileUtil();
				}
			}
		}
		return fileUtil;
	}

	/**
	 * 创建目录
	 *
	 * @param path    文件夹的路径
	 * @param dirName 文件夹名
	 */
	public File createSDDir(String path, String dirName) {
		File directory = new File(path + dirName);
		if (directory.exists() && directory.isDirectory()) {
			return directory;
		}
		directory.mkdir();
		return directory;
	}

	/**
	 * 创建文件
	 *
	 * @param path     文件的路径
	 * @param fileName 文件名
	 */
	public File createSDFile(String path, String fileName) {
		File file = new File(path + fileName);
		if (file.exists() && file.isFile()) {
			return file;
		}
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return file;
	}

	/**
	 * 向SD卡中写入文件
	 *
	 * @param path        文件夹名
	 * @param fileName    文件名
	 * @param inputStream 输入流
	 */
	public void writeToSD(String path, String fileName, InputStream inputStream) {
		OutputStream outputStream = null;
		try {
			File dir = createSDDir(AppPath, path);
			File file = createSDFile(dir.getAbsolutePath() + "/", fileName);
			outputStream = new FileOutputStream(file);
			int length;
			byte[] buffer = new byte[2 * 1024];
			while ((length = inputStream.read(buffer)) != -1) {
				//注意这里的length；
				//利用read返回的实际成功读取的字节数，将buffer写入文件，否则将会出现错误的字节，导致保存文件与源文件不一致
				outputStream.write(buffer, 0, length);
			}
			outputStream.flush();


		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (outputStream != null) {
					outputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 获取单词的地址
	 *
	 * @param fileName 单词存放的文件夹名
	 * @return mp3的地址的上一个目录
	 */
	public String getPath(String fileName)
	{
		File file = new File(AppPath + fileName);
			return file.getAbsolutePath();

	}

	/**
	 * 递归删除文件夹
	 *
	 * @param filePath 要删除的文件夹
	 */
	public void deleteFile(File filePath)
	{
		//判断文件是否存在
		if (filePath.exists())
		{
			//判断是否是文件
			if (filePath.isFile())
			{
				//删除文件
				filePath.delete();
				//否则如果它是一个目录
			} else if (filePath.isDirectory())
			{
				//声明目录下所有的文件 files[];
				File[] files = filePath.listFiles();
				//遍历目录下所有的文件
				for (int i = 0; i < files.length; i++)
				{
					//把每个文件用这个方法进行迭代
					deleteFile(files[i]);
				}
				filePath.delete();//删除文件夹
			}

			Toast.makeText(App.sContext , "删除成功", Toast.LENGTH_SHORT).show();
		}
	}
}
